#!/bin/bash
# sh ./test_sh_json_string.sh
:<<!
测试数组转义并转成字符串的示例
!


# 当前【shell脚本】的工作目录
# $PWD代表获取当前路径，当cd后，$PWD也会跟着更新到新的cd路径。这个和在终端操作是一样的道理的
CurrentDIR_Script_Absolute="$( cd "$( dirname "$0" )" && pwd )"
#echo "CurrentDIR_Script_Absolute=${CurrentDIR_Script_Absolute}"
#CommonFun_HomeDir_Absolute2=${CurrentDIR_Script_Absolute}/..
CommonFun_HomeDir_Absolute2=${CurrentDIR_Script_Absolute%/*} # 使用此方法可以避免路径上有..
CommonFun_HomeDir_Absolute=${CommonFun_HomeDir_Absolute2%/*}



# markdown 添加 字体颜色fontColor 支持
function markdown_fontColor() {
    shouldMarkdown=$1
    fontColor=$3
    if [ -z "${fontColor}" ]; then
        fontColor="info"
    fi
    # 方式1：
#    connectionString $2 "<font color=$fontColor>" "prefix"
    
    # 方式2(推荐)：
    reulstMessage=$2
    reulstMessage=$(connectionString "${shouldMarkdown}" "${reulstMessage}" "<font color=$fontColor>" "prefix")
    reulstMessage=$(connectionString "${shouldMarkdown}" "${reulstMessage}" "</font>" "suffix")
    echo "${reulstMessage}"
}

function connectionString() {
    shouldMarkdown=$1   # 是否使用markdown格式
    originString=$2
        
    if [ "${shouldMarkdown}" != "true" ]; then
        echo ${originString}
        return
    fi
    
    addString=$3
    addPostion=$4
            
    # 使用 echo 将值返回的时候，多余的echo不要写，除非你是调试
#    echo "originString=$originString"
#    echo "addString=$addString"
#    echo "addPostion=$addPostion"
    if [ "${addPostion}" == "prefix" ]; then
        echo "${addString}${originString}"
    elif [ "${addPostion}" == "suffix" ]; then
        echo "${originString}${addString}"
    fi
}





echo "\n\n"
echo "---------------------------------------------2对数组元素进行 markdown 操作"
echo "-------------------------2.1在遍历markdown的过程中就遍历转义并拼接的字符串，是元素个数不变的字符串，验证通过✅"
shouldMarkdown="true"
branchOutlinesCount=${#NORMAL_ARRAY[*]}
result2=''
result2+='['
for ((branchOutlineIndex=0;branchOutlineIndex<branchOutlinesCount;branchOutlineIndex++))
do
    iBranchOutlineLog="${NORMAL_ARRAY}[${branchOutlineIndex}]"
    #echo "$((branchOutlineIndex+1)) iBranchOutlineLog=${iBranchOutlineLog}"
    iBranchOutlineLog=$(markdown_fontColor "${shouldMarkdown}" "${iBranchOutlineLog}" "info")
    
#    branchOutlineArray[${#branchOutlineArray[@]}]="${iBranchOutlineLog}"
    branchOutlineArray[${branchOutlineIndex}]="${iBranchOutlineLog}"
    result2+='"'
    result2+="${iBranchOutlineLog}"
    result2+='"'
    
    if [ ${branchOutlineIndex} -lt $((branchOutlinesCount-1)) ]; then
        result2+=","
    fi
done
result2+=']'
echo "${result2}"


echo "-------------------------2.2.①在遍历markdown的结束后，使用新的markdown元素组成的数组，由于元素个数在有加入空格的时候发生变化，所以使用新数组重新遍历，并转义拼接的字符串，不正确，验证不通过❌"
function showArr(){
  arr=$1
  for i in ${arr[*]}; do
    echo $i
  done
}
showArr "${branchOutlineArray[*]}"


echo "-------------------------2.2.②同2.2.①验证不通过❌"
source "${CurrentDIR_Script_Absolute%/*}/function_jsonstring.sh"
result3=$(getJsonStringWithEscapeFromArrayString ${branchOutlineArray[*]})
echo "----------$result3"


echo "\n"
echo "结论：：：：：：对数组元素进行 markdown，应该在遍历markdown的过程中就遍历转义并拼接的字符串，而不能在遍历markdown的结束后，使用新的markdown元素组成的数组来遍历转义并拼接。"
echo "\n"
